package gui;

import gui.nodes.AbstractNode;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import persistence.db.DataSet;

import utility.Record;

import business.MatiereBL;
import business.SEEBL;
import business.TypeEnseignementBL;

public class SEEUIConsulter extends AbstractViewPane {

		
	private ViewMode currentViewMode;
	
	//champs du formulaire
	private JTextField fieldNom;
	private JSpinner spinNbPeriode;
	private JComboBox comboTEns;
    
	//variables d'affichage du formulaire
	private int id = -1;
	private int matiereId;
	private String nom;
	private int nbPeriode = 0; 
	private int idTEnseignement = 1;
	private DataSet serviceSet = null;
	private AbstractNode creator;
	
	private ComponentList componentList = new ComponentList();
	
	public SEEUIConsulter(AbstractNode creator, ViewMode v,int seeId, int matiereId) {
		this.creator = creator;
		this.currentViewMode = v;
		id = seeId;
		this.matiereId = matiereId;
		MatiereBL matiereBL = new MatiereBL(matiereId);
		nom = matiereBL.getNomMatiere();
		initGUI(seeId);
	}
	
	@Override
	public String getTitle() {
		System.out.println("consultation : " + currentViewMode);
		if (currentViewMode == ViewMode.CONSULTATION){
			return "Consultation d'un SEE";
		}else if  (currentViewMode == ViewMode.MODIFICATION){
			return "Modification d'un SEE";
		}else if (currentViewMode == ViewMode.AJOUT){
			return "Ajout d'un nouvel SEE";
		}else {
			return "probleme avec le viewmode";
		}
	}
	
	@Override
	public boolean hasBeenModified() {
		return (currentViewMode != ViewMode.CONSULTATION);
	}
	
	private void initGUI(int seeId) {
		
		TypeEnseignementBL blTEns = new TypeEnseignementBL();
		SEEBL blSEE;
		
        if(currentViewMode != ViewMode.AJOUT){
        	//si on est en consultation ou modification (recuperation des elements en base)
        	blSEE = new SEEBL(seeId);
        	id = seeId;
        	nbPeriode = blSEE.getNombreDePeriodes();
        	blTEns = new TypeEnseignementBL(blSEE.getIdTypeEnseignement());
        	idTEnseignement = blTEns.getIdTypeEnseignement();
        }

        JPanel p = new JPanel(new SpringLayout());
        
        JLabel lMatiere = new JLabel("Matière", JLabel.TRAILING);
        p.add(lMatiere);
        
        JLabel lNomMatiere = new JLabel (nom, JLabel.TRAILING);
        p.add(lNomMatiere);
        
        JLabel lnbPeriodes = new JLabel("Nombre de périodes", JLabel.TRAILING);
        p.add(lnbPeriodes);
        
        SpinnerNumberModel sm = new SpinnerNumberModel(nbPeriode, 0, 200, 1);
        spinNbPeriode= new JSpinner(sm);

        lnbPeriodes.setLabelFor(spinNbPeriode);
        
        p.add(spinNbPeriode);
        componentList.add(spinNbPeriode);
        
        JLabel ltypeEns = new JLabel("Type d'enseignement", JLabel.TRAILING);
        p.add(ltypeEns);
        ltypeEns.setLabelFor(comboTEns);
        
        
        comboTEns = makeComboTEns(blTEns, idTEnseignement);

        p.add(comboTEns);
        componentList.add(comboTEns);


        //Lay out the panel.
        SpringUtilities.makeCompactGrid(p,
                                        3, 2, //rows, cols
                                        6, 6,        //initX, initY
                                        6, 6);       //xPad, yPad
        
        add(p, BorderLayout.NORTH);
        
        if (currentViewMode != ViewMode.CONSULTATION) {
			// Mode modification - afficher les boutons
			JPanel commandBox = new JPanel();
			JButton save = new JButton("Enregistrer");
			save.setActionCommand("Enregistrer");
			save.addActionListener(new SEEListener());
			commandBox.add(save);
			drawCommandBox(commandBox);
        }
        else {
        	componentList.disableAll();
        }
	}
	
	private JComboBox makeComboTEns (TypeEnseignementBL blTEns, int tEns){
		JComboBox comboTEns = new JComboBox();
		for (Record typeEns : blTEns.getListeTypeEnseignement()) {
			//On va selectionner le statut qui correspond au statut de la base
			if(typeEns.getId() == idTEnseignement){
				comboTEns.addItem(typeEns);
				comboTEns.setSelectedItem(typeEns);
			} else {
				comboTEns.addItem(typeEns);
			}
		}
		return comboTEns;
	}
	
	//inner class chargee de gerer l'ecoute du bouton d'enregistrement du formulaire
	private class SEEListener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			if(arg0.getActionCommand().equals("Enregistrer")){
				System.out.println("Demande d'enregistrement");
				SEEBL seeSave = new SEEBL();
				//si -1, c'est un ajout d'enseignant, sinon modification de l'enseignant de l'id concerné
				if(getId() == -1){
					seeSave.ajouterSEE(getId(), getNbPeriode(), getIdMatiere(), getIdTEns(), getServiceSet());
					componentList.disableAll();
				} else {
					seeSave.modifierSEE(getId(), getNbPeriode(), getIdMatiere(), getIdTEns(), getServiceSet());
					componentList.disableAll();
				}
				creator.refresh();
			}	
		}
	}
	
	//accesseurs
	public int getId(){
		return id;
	}
	public int getNbPeriode(){
		return Integer.parseInt(spinNbPeriode.getValue().toString());
	}
	public int getIdTEns(){
		return ((Record)comboTEns.getSelectedItem()).getId();
	}
	public int getIdMatiere(){
		return matiereId;
	}
	public DataSet getServiceSet(){
		return serviceSet;
	}
	
}
